<?php
namespace app\admin\controller;

use app\common\controller\Backend;
//require_once './../vendor/xunsearch/sdk/php/lib/XS.php';
vendor('xunsearch.sdk.php.lib.XS');
/**
 * xunsearch迅搜
 * @remark 用于文章搜索等
 */
class Xunsearch extends Backend
{
    public function _initialize()
    {
        parent::_initialize();
        $this->comments = new \app\admin\model\Comments;
        $this->articles = new \app\admin\model\Articles;
        $this->xs = new \XS('dev_blog'); // 这里是关键, XS这个类不在Home\Controller空间中,是在公共空间,所以加反斜杠就不会提示class xxx not found 错误了
    }
    /**
     * 清除全部索引
     */
    public function clean()
    {
        if ($this->request->isAjax()) {
            //执行的话立即生效
            $this->xs->index->clean();
            $this->success('执行成功！', null, '清除成功，立即生效！');
        }
    }
    /**
     * 添加索引，使用平滑重建索引，防止破坏已有搜索索引，也能规避出现重复索引
     */
    public function rebuild()
    {
        if ($this->request->isAjax()) {
            $lists = $this->articles->all();
            $list = collection($lists)->toArray();
            // 宣布开始重建索引
            $this->xs->index->beginRebuild();
            $doc = new \XSDocument(); //创建添加数据对象
            foreach ($list as $key => $value) { //遍历添加数据到搜索栈中
                $totalcomments = $this->comments
                ->where('article_id', '=', $value['id'])
                ->count();
                $list[$key]['totalcomments']=$totalcomments;
                $list[$key]['article_content']=strip_tags($value['article_content']);
                $doc->setFields($list[$key]);
                $this->xs->index->add($doc); //使用update()无需验证数据唯一性，直接覆盖更新数据，使用add()会产生重复数据
            }
            //宣布重建结束
            $this->xs->index->endRebuild();
            $this->xs->index->flushIndex();
            $this->success('执行成功！', null, '索引重建成功！');
        }
    }
    /**
     * 更新索引
     */
    public function update(Type $var = null)
    {
        # code...
    }
    /**
     * 搜索方法
     */
    public function search(Type $var = null)
    {
        # code...
    }
}
